/* ---------------------------------------------------------------------------------------
 * 
 * fe_memutils.h
 *        memory management support for frontend code
 *
 * Copyright (c) 2003-2015, PostgreSQL Global Development Group
 * 
 * IDENTIFICATION
 *        src/include/common/fe_memutils.h
 *
 * ---------------------------------------------------------------------------------------
 */
#ifndef FE_MEMUTILS_H
#define FE_MEMUTILS_H

/*
 * Flags for pg_malloc_extended and palloc_extended, deliberately named
 * the same as the backend flags.
 */
#define MCXT_ALLOC_HUGE                                              \
    0x01                       /* allow huge allocation (> 1 GB) not \
                                * actually used for frontends */
#define MCXT_ALLOC_NO_OOM 0x02 /* no failure if out-of-memory */
#define MCXT_ALLOC_ZERO 0x04   /* zero allocated memory */

#include "c.h"

/*
 * "Safe" memory allocation functions --- these exit(1) on failure
 * (except pg_malloc_extended with MCXT_ALLOC_NO_OOM)
 */
extern char* pg_strdup(const char* in);
extern void* pg_malloc(size_t size);
extern void* pg_malloc0(size_t size);
extern void* pg_malloc_extended(size_t size, int flags);
extern void* pg_realloc(void* pointer, size_t size);
extern void pg_free(void* pointer);

/* Equivalent functions, deliberately named the same as backend functions */
extern void* palloc(Size size);
extern void* palloc_extended(Size size, int flags);
extern void pfree(void* pointer);

#endif /* FE_MEMUTILS_H */

